// Grunt 的入口文件
// 用于定义一些需要Grunt自动执行的任务
// 需要导出一个函数
// 函数接受一个grunt的形参，内部提供一些创建任务是可以用到的API

module.exports = grunt => {
    grunt.registerTask("foo", () => {
        console.log("hello grunt");
    });

    grunt.registerTask("bar", "任务描述", () => {
        console.log("任务描述");
    });

    grunt.registerTask("default", ["foo", "bad", "bar"]);

    //grunt默认只支持同步模式 函数不能使用箭头函数 异步操作需要使用this.async()
    grunt.registerTask("async-task", function () {
        const done = this.async();
        setTimeout(() => {
            console.log("async-task");
            done();
        }, 1000);
    });

    grunt.registerTask("bad", () => {
        console.log("bad");
        return false; // 标记任务失败
    });

    grunt.registerTask("bad-async", function () {
        const done = this.async();
        setTimeout(() => {
            console.log("bad-async");
            done(false); // 标记异步任务失败
        }, 1000);
    });

    // grunt.initConfig({
    //     foo1: "bar",
    //     pie: { name: "pie" },
    //     build: {
    //         options: {
    //             foo: "bar",
    //         },
    //         js: "1",
    //         css: {
    //             options: {
    //                 foo: "baz",
    //             },
    //         },
    //     },
    // });
    grunt.registerTask("foo1", () => {
        console.log(grunt.config("foo1"));
        console.log(grunt.config("pie.name"));
    });

    // 多目标模式，可以让任务根据配置形成多个子任务
    // yarn grunt build:js
    grunt.registerMultiTask("build", function () {
        console.log("target", this.target, "data", this.data);
        console.log(this.options());
    });

    //grunt grunt-contrib-clean 插件使用
    grunt.loadNpmTasks('grunt-contrib-clean')

    grunt.initConfig({
        clean: {
            temp: 'temp/index.js' // temp/*.js 通配js temp/** 所有
        }
    })

    /**
     * grunt 常见插件介绍
     * 
     *  grunt-sass sass编译器
     *  grunt-babel es6编译器
     *  grunt-contrib-watch 文件修改后自动编译
     *  load-grunt-tasks 自动加载所有的grunt插件
     * 
     */
};
